import configparser
import os
class ConfigReader:
    def __init__(self, file_name):
        self.config = configparser.ConfigParser()
        config_path = os.path.split(os.path.realpath(__file__))[0] + os.sep + file_name
        self.config.read(config_path, "utf-8")

    def get_config(self, config_item): # todo：通过cfg文件的title，获取它的值
        sections = self.config.sections()
        for section in sections:
            if self.config.has_option(section, config_item):
                return self.config.get(section, config_item)

class DB():
    def __init__(self, database_name):
        cf = ConfigReader("databases_config_test.cfg")  # todo:连接的哪个数据库，如果有多套环境，记得这里也要切换下数据库配置
        self.host = cf.get_config(database_name + "_host")  # todo：获取具体的host地址
        self.port = cf.get_config(database_name + "_port")   # todo：获取具体的port端口号
        self.user = cf.get_config(database_name + "_user") # todo：获取具体的user账号
        self.password = cf.get_config(database_name + "_password")# todo：获取具体的数据库密码
        self.database_name = database_name
    def connect(self):  # todo:创建连接数据库方法
        import pymysql
        # 创建数据库连接
        self.db = pymysql.connect(host=self.host, user=self.user, password=
        self.password, database=self.database_name)
        # 创建游标
        self.cursor = self.db.cursor()

    def get_one(self, sql):  # todo:返回一条数据
        result = 0
        try:
            self.connect()
            self.cursor.execute(sql)
            result = self.cursor.fetchone()
            self.close()
        except Exception as e:
            print('select error', e)
        return result

    def get_all(self, sql):  # todo:返回全部符合条件的查询结果
        result = 0
        try:
            self.connect()
            self.cursor.execute(sql)
            result = self.cursor.fetchall()
            self.close()
        except Exception as e:
            print("select error", e)
        return result

    def __edit(self, sql):  # 创建主函数
        result = 1  # 设置结果集，用于调用的时候做判断
        try:  # 这里是使用的try语句来尝试进行操作
            self.connect()
            self.cursor.execute(sql)
            self.db.commit()  # 注意的是，如果是对数据库做了修改、删除、增加的操作，那么一定要commit提交，查询和创建表不需要提交
            self.close()
        except Exception as e:  # 如果操作失败，报出操作异常，且游标进行回滚
            print('error :', e)
            result = 0
            self.db.rollback()
        return result

    def insert(self, sql):
        # 插入语句  ，以下三个都是一样的，只是调用的时候，我们看起来更加清晰而已
        return self.__edit(sql)  # 通过主函数的处理，来去执行sql语句

    def delete(self, sql):  # 删除语句
        return self.__edit(sql)

    def update(self, sql):  # 修改语句
        return self.__edit(sql)

    def close(self):  # 关闭方法
        self.cursor.close()  # 关闭游标
        self.db.close()  # 关闭数据库


# d1.insert("insert into student(id,name) values(null,'小白')")
# print(d1.get_one('select * from student where id =1'))








